home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 26.zip
/
BS1 part 26
/
AMOS compiler.adf
/
Examples
/
3d_cube.AMOS
/
3d_cube.amosSourceCode
Wrap
AMOS Source Code
|
1991-06-13
|
4KB
|
193 lines
'
'
' 3d Cube Demo Showing Speed Of Compiled Calculations.
' (c) Europress Software Ltd.
'
' By Gary Symons B.Sc.
'
'
Set Buffer 80
'
Hide
'
Dim _COS(360),_SIN(360)
'
Degree
For I=0 To 359
_COS(I)=Cos(I)*4096
_SIN(I)=Sin(I)*4096
Next I
'
Gosub CREATE_OBJECT
'
Screen Open 0,640,200,2,Hires
Curs Off : Colour 1,$FFF
Locate 0,16
Print : Centre "3D Cube By Gary Symons."
Print : Centre "-Controls-"
Print
Print : Centre "Left mouse key - Diminish"
Print : Centre "Right mouse key - Zoom"
Print : Centre "Arrows - Up Down Left & Right"
Print : Centre "7(Home) on key pad rotate about y"
Print : Centre "3(PgDn) on key pad rotate about x"
Print : Centre "9(pgUp) on key pad rotate about z"
CX=320 : CY=100
Global CX,CY,I,A,B
'
Gr Writing 2 : Wait Vbl
Gosub SET_SCREEN
Double Buffer : Update Off : Autoback 0
A=0
B=0
OA1=A : OB1=B : OI1=I : OANX1=ANX : OANY1=ANY : OANZ1=ANZ
X=OA1 : Y=OB1 : Z=OI1 : AX=OANX1 : AY=OANY1 : AZ=OANZ1 : Gosub OBJECT
Screen Swap : Wait Vbl
OA2=A : OB2=B : OI2=I : OANX2=ANX : OANY2=ANY : OANZ2=ANZ
X=OA2 : Y=OB2 : Z=OI2 : AX=OANX2 : AY=OANY2 : AZ=OANZ2 : Gosub OBJECT
Screen Swap : Wait Vbl
KR=0
Do
X=OA1 : Y=OB1 : Z=OI1 : AX=OANX1 : AY=OANY1 : AZ=OANZ1
Gosub OBJECT
Gosub MOVE_OBJECT
OA1=A : OB1=B : OI1=I : OANX1=ANX : OANY1=ANY : OANZ1=ANZ
X=OA1 : Y=OB1 : Z=OI1 : AX=OANX1 : AY=OANY1 : AZ=OANZ1
Gosub OBJECT
Screen Swap : Wait Vbl
'
X=OA2 : Y=OB2 : Z=OI2 : AX=OANX2 : AY=OANY2 : AZ=OANZ2
Gosub OBJECT
Gosub MOVE_OBJECT
OA2=A : OB2=B : OI2=I : OANX2=ANX : OANY2=ANY : OANZ2=ANZ
X=OA2 : Y=OB2 : Z=OI2 : AX=OANX2 : AY=OANY2 : AZ=OANZ2
Gosub OBJECT
Screen Swap : Wait Vbl
Loop
'
MOVE_OBJECT:
Add ANX,XA,0 To 359
Add ANY,YA,0 To 359
Add ANZ,ZA,0 To 359
If KR=0
If Key State($1F) : Add XA,1,0 To 359 : KR=1 : End If
If Key State($3D) : Add YA,1,0 To 359 : KR=1 : End If
If Key State($3F) : Add ZA,1,0 To 359 : KR=1 : End If
Else
If(Key State($1F)=0 and(Key State($3D)=0) and(Key State($3F)=0))
KR=0
End If
End If
If Key State($4F) Then Add A,10
If Key State($4E) Then Add A,-10
If Key State($4D) Then Add B,10
If Key State($4C) Then Add B,-10
If Mouse Key=1 Then Add I,10
If Mouse Key=2 Then Add I,-10
If I<230 Then I=230
Return
'
OBJECT:
Q=Varptr(OBJECT$)
C=Leek(Q)
Add Q,4
While C<>0
RX=Leek(Q)
Add Q,4
RY=Leek(Q)
Add Q,4
RZ=Leek(Q)
Add Q,4
CS=_COS(AX)
SN=_SIN(AX)
'
RY2=(RY*CS+RZ*SN)/4096
RZ=(RZ*CS-RY*SN)/4096
RY=RY2
'
CS=_COS(AY)
SN=_SIN(AY)
RX2=(RX*CS+RZ*SN)/4096
RZ=(RZ*CS-RX*SN)/4096
RX=RX2
'
CS=_COS(AZ)
SN=_SIN(AZ)
RY2=(RY*CS+RX*SN)/4096
RX=(RX*CS-RY*SN)/4096
RY=RY2
'
X3=X+RX
Y3=Y+RY
Z3=Z+RZ
Add Z3,128
Rol.l 9,X3
Rol.l 8,Y3
X3=X3/Z3
Y3=Y3/Z3
Add X3,CX
Add Y3,CY
'
If C=1 Then Gr Locate X3,Y3
'
If C=2 Then Draw To X3,Y3
'
C=Leek(Q)
Add Q,4
Wend
Return
'
SET_SCREEN:
Colour 0,$F00
Colour Back $F00
Set Rainbow 0,0,144,"(9,-1,16)","","(9,1,16)"
Rainbow 0,9,Y Hard(0,0),128
Set Rainbow 1,0,80,"(5,1,16)","",""
Rainbow 1,0,Y Hard(0,128),73
Draw 0,127 To 640,127
Draw To 400,100
Draw To 300,10
Draw To 200,80
Draw To 0,127
Return
'
CREATE_OBJECT:
OBJECT$=Space$(400)
O=Varptr(OBJECT$)
Restore DT_3D
Read A
While A
Loke O,A
Add O,4
Read B
Loke O,B
Add O,4
Read C
Loke O,C
Add O,4
Read D
Loke O,D
Add O,4
Read A
Wend
Loke O,A
Return
'
DT_3D:
Data 1,-100,-100,100
Data 2,-100,100,100
Data 2,100,100,100
Data 2,100,-100,100
Data 2,-100,-100,100
Data 2,-100,-100,-100
Data 2,-100,100,-100
Data 2,-100,100,100
Data 1,100,-100,100
Data 2,100,-100,-100
Data 2,100,100,-100
Data 2,100,100,100
Data 1,100,-100,-100
Data 2,-100,-100,-100
Data 1,100,100,-100
Data 2,-100,100,-100
Data 0